package cn.iocoder.yudao.framework.magic.config.interceptor;


import lombok.extern.log4j.Log4j2;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.ssssssss.magicapi.core.interceptor.RequestInterceptor;
import org.ssssssss.magicapi.core.model.ApiInfo;
import org.ssssssss.magicapi.core.servlet.MagicHttpServletRequest;
import org.ssssssss.magicapi.core.servlet.MagicHttpServletResponse;
import org.ssssssss.script.MagicScriptContext;

/**
 * 拦截请求
 */
@Order(1) //拦截器顺序，可选
@Log4j2
public class RequestInterceptorCustom implements RequestInterceptor {


    /*
     * 当返回对象时，直接将此对象返回到页面，返回null时，继续执行后续操作
     */
    @Override
    public Object preHandle(ApiInfo info, MagicScriptContext context, MagicHttpServletRequest request, MagicHttpServletResponse response) {
        log.info("请求前：" + info.getPath());
        // 需要注意，ApiInfo 是页面上定义的信息，里面的值并不是实际请求的参数！！！
        // 拦截请求并直接返回结果，不继续后续代码
        // 需要注意的是，拦截器返回的结果不会被包裹一层json值，也不会走ResultProvider
        // return new JsonBean<>(100,"拦截器返回");
        // 放开请求，执行后续代码
        return null;
    }
   /*
    此类有多个preHandle重载方法，根据需要自行选择
   @Override
   public Object preHandle(RequestEntity requestEntity) throws Exception {
       RequestEntity 是本次请求中所有的参数信息封装的对象，可以获取实际请求参数等信息
	   return null;
   }
   */
    /**
     * 执行完毕之后执行
     * @param value 即将要返回到页面的值
     * @return 返回到页面的对象,当返回null时执行后续拦截器，否则直接返回该值，不执行后续拦截器
     */
    @Override
    public Object postHandle(ApiInfo info, MagicScriptContext context, Object value, MagicHttpServletRequest request, MagicHttpServletResponse response) {
        // 需要注意，ApiInfo 是页面上定义的信息，里面的值并不是实际请求的参数！！！
        log.info("请求后：" + info.getPath());
        log.info("返回结果：" + value);
        // 拦截请求并直接返回结果，不继续后续代码
        // 需要注意的是，拦截器返回的结果不会被包裹一层json值，也不会走ResultProvider
        // return new JsonBean<>(100,"拦截器返回");
        // 放开请求，执行后续代码
        return null;
    }

   /*
   此类有多个postHandle重载方法，根据需要自行选择
   @Override
   public Object postHandle(RequestEntity requestEntity, Object returnValue) throws Exception {
       RequestEntity 是本次请求中所有的参数信息封装的对象，可以获取实际请求参数等信息
	   return null;
   }
   */

}
